from django.db import models
from django.utils import timezone
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator, MaxValueValidator
import datetime
# Create your models here.


class Ylfwtz(models.Model):
    KS_CHOIES = [
        (1, '综合住院'),
        (2, '综合门诊'),
        (3, '化验室'),
        (4, 'B超室'),
        (5, '手术室'),
        (6, '中医理疗'),
        (7, '药房'),
        (8, '转移联单')
    ]

    # 日期 = models.DateField(verbose_name='日期', default = timezone.now)  # 时区时间
    日期 = models.DateField(
        verbose_name='日期', default=datetime.datetime.now)  # 显示当前时间
    # 时间 = models.TimeField(default = timezone.now)  # 时区时间
    时间 = models.TimeField(default=datetime.datetime.now)  # 显示当前时间
    科室 = models.SmallIntegerField(choices=KS_CHOIES, default=1)
    感染性 = models.DecimalField(max_digits=8, decimal_places=2, default=0, validators=[MinValueValidator(
        0), MaxValueValidator(10)], error_messages={'min_value': '值不能小于%(limit_value)s', 'max_value': '值不能大于%(limit_value)s'},help_text='单位kg，值不能小于0')
    损伤性 = models.DecimalField(max_digits=8, decimal_places=2, default=0,validators=[MinValueValidator(
        0), MaxValueValidator(10)], error_messages={'min_value': '值不能小于%(limit_value)s', 'max_value': '值不能大于%(limit_value)s'},help_text='单位kg，值不能小于0')
    药物性 = models.DecimalField(max_digits=8, decimal_places=2, default=0, validators=[MinValueValidator(
        0), MaxValueValidator(10)], error_messages={'min_value': '值不能小于%(limit_value)s', 'max_value': '值不能大于%(limit_value)s'},help_text='单位kg，值不能小于0')
    病理性 = models.DecimalField(max_digits=8, decimal_places=2, default=0, validators=[MinValueValidator(
        0), MaxValueValidator(10)], error_messages={'min_value': '值不能小于%(limit_value)s', 'max_value': '值不能大于%(limit_value)s'},help_text='单位kg，值不能小于0')
    化学性 = models.DecimalField(max_digits=8, decimal_places=2, default=0, validators=[MinValueValidator(
        0), MaxValueValidator(10)], error_messages={'min_value': '值不能小于%(limit_value)s', 'max_value': '值不能大于%(limit_value)s'},help_text='单位kg，值不能小于0')

    class Meta:
        db_table = 'ylfwtz'
        verbose_name = '医疗废物台帐'
        verbose_name_plural = '医疗废物台帐'
        unique_together = (('日期', '科室'),)
        # constraints = [
        #     # 基础用法：等同于 unique_together
        #     models.UniqueConstraint(
        #         fields=['日期', '科室'],
        #         name='unique_日期_科室'
        #     ),
        #     # 高级用法：条件唯一约束（unique_together 无法实现）
        #     # models.UniqueConstraint(
        #     #     fields=['日期'],
        #     #     condition=models.Q(is_active=True),
        #     #     name='unique_日期_when_active'
        #     # ),
        # ]

    def clean(self):
        super().clean()
        # 检查联合唯一性
        if Ylfwtz.objects.filter(日期=self.日期, 科室=self.科室).exclude(pk=self.pk).exists():
            raise ValidationError("同一天同一个科室只能录入一次，请修改您的输入。")
